using NHibernate;
using NHibernate.Criterion;

namespace FwkLight.Domain
{
  public interface ICriteriaSpecification<T> : ISpecification<T>
  {
    ICriteria EnsureThatWillBeSatisfiedBy ( ICriteria criteria );
  }

	public interface ICriteriaSpecification<T, Param1> : ISpecification<T, Param1>
	{
		ICriteria EnsureThatWillBeSatisfiedBy(ICriteria criteria, Param1 param1);
	}

  public interface ICriteriaSpecification<T, Param1, Param2> : ISpecification<T, Param1, Param2>
  {
    ICriteria EnsureThatWillBeSatisfiedBy(ICriteria criteria, Param1 param1, Param2 param2);
  }

  public interface ICriteriaSpecification<T, Param1, Param2, Param3> : ISpecification<T, Param1, Param2, Param3>
  {
    ICriteria EnsureThatWillBeSatisfiedBy(ICriteria criteria, Param1 param1, Param2 param2, Param3 param3);
  }

  public interface ICriteriaSpecification<T, Param1, Param2, Param3, Param4> : ISpecification<T, Param1, Param2, Param3, Param4>
  {
    ICriteria EnsureThatWillBeSatisfiedBy(ICriteria criteria, Param1 param1, Param2 param2, Param3 param3, Param4 param4);
  }
}